package com.hbnu.system.utils;

import com.hbnu.system.model.Enum.RoleEnum;
import com.hbnu.system.model.context.BaseContext;
import com.hbnu.system.model.entity.User;
import com.hbnu.system.service.IUserService;
import lombok.Getter;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Objects;

/**
 * 用户信息工具类：封装通过当前上下文获取用户信息的逻辑
 */
@Component
public class UserInfoUtils {

    @Resource
    private IUserService userService;  // 变量名简化为userService（符合命名规范）

    /**
     * 封装用户信息（角色名称+用户名）
     */
    @Getter
    public static class UserInfo {
        private final String roleName;  // 明确字段含义：角色名称
        private final String userName;  // 用户名

        public UserInfo(String roleName, String userName) {
            this.roleName = roleName;
            this.userName = userName;
        }
    }

    /**
     * 通过BaseContext获取当前用户信息（无需token，直接从上下文拿用户ID）
     * @return 封装后的用户信息
     */
    public UserInfo getCurrentUserInfo() {  // 方法名更清晰：获取当前用户信息
        String userId = BaseContext.getCurrentId();
        User user = userService.getById(userId);
        
        // 校验用户是否存在（避免NPE）
        if (Objects.isNull(user)) {
            throw new IllegalStateException("当前用户不存在或已失效");
        }
        
        // 转换角色编码为角色名称（使用RoleEnum）
        String roleCode = user.getRole();
        RoleEnum roleEnum = RoleEnum.getByCode(roleCode);
        String roleName = Objects.requireNonNull(roleEnum, "角色编码不存在").getName();
        
        return new UserInfo(roleName, user.getName());
    }
}